package top.didi.study.javawebjdbc.dao;

import top.didi.study.javawebjdbc.entity.TBClass;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class TbClassDAO {
    //jdbc:java数据库链接
    //dao:数据访问对象
    //entity:实体类，一般就是描述数据的类
    //java.sql.Connection类就是数据库的连接类

    //仿照上课的班级管理完成新闻管理功能
    //开发次序：1：实体类，2：对应的dao 添加，查询，删除，3：完成测试，4：完成jsp页面
    //思考题：
    //仿照新闻管理，完成公告管理的功能
    //公告的信息包括主键，公告的标题，公告的类容，公告的发布人姓名，公告的发布时间
    //添加难点，就是多一个是否制订的字段，类型是int，0表示不制定，1表示置顶

    public static int insert(TBClass tBClass) throws SQLException {
        //链接数据库
        Connection conn = DBHelper.getConnection();
        //预备添加的语句,?表示一个参数
        String sql = "insert into tb_class(classname, classinfo) values(?,?)";
        //java的预处理sql语句
        PreparedStatement ps = conn.prepareStatement(sql);
        //设置？参数对应的值
        ps.setString(1, tBClass.getClassname());
        ps.setString(2, tBClass.getClassinfo());
        //执行语句并获取语句影响的行数
        int i = ps.executeUpdate();
        //关闭数据库的链接
        conn.close();
        return i;


    }

    public static List<TBClass> query() throws SQLException {
        List<TBClass> list = new ArrayList<>();
        //数据库链接
        Connection conn = DBHelper.getConnection();
        //查询语句
        String sql = "select * from tb_class";
        //预处理sql语句
        PreparedStatement ps = conn.prepareStatement(sql);
        //执行查询并返回结束集
        ResultSet rs = ps.executeQuery();
        //查询结果集的next是读取下一行数据，如果读取到就返回真，否则就是假
        while (rs.next()){
            TBClass tbClass = new TBClass();
            //rs.get数据类型（“数据表中字段名称”）就是获取查询结果中指定字段的数据
            tbClass.setId(rs.getInt("id"));
            tbClass.setClassname(rs.getString("classname"));
            tbClass.setClassinfo(rs.getString("classinfo"));
            //java的Date类型对应的是数据库api的Timestamp类型
            tbClass.setCreated(rs.getTimestamp("created"));
            //添加到集合
            list.add(tbClass);
        }

        conn.close();
        return list;
    }

    public static  int delete(Integer id) throws SQLException {
        Connection conn = DBHelper.getConnection();
        String sql = "delete from tb_class where id=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1,id);
        int i = ps.executeUpdate();
        conn.close();
        return i;
    }
}
